草庐IT

Android AsyncTask 内存泄漏

全部标签

c++ - “static const”、 “#define” 和 “enum” 在性能和内存使用方面的区别

可能是因为#define语句的内联。我知道答案可能取决于编译器,那么假设是GCC。已有类似问题aboutC和aboutC++,但它们更多地是关于使用方面的。 最佳答案 编译器会在给定基本优化后将它们视为相同。检查起来相当容易-考虑以下C代码:#definea1staticconstintb=2;typedefenum{FOUR=4}enum_t;intmain(){enum_tc=FOUR;printf("%d\n",a);printf("%d\n",b);printf("%d\n",c);return0;}用gcc-O3编译:00

c++ - std::queue 内存消耗导致内存泄漏 - C++?

即使在我从qInt队列中弹出所有元素后,以下代码也没有释放3000个元素消耗的内存。是什么原因?std::queueqInt;//Step01:Checktherunningmemoryfor(inti=0;i 最佳答案 默认情况下,std容器在保留内存后不会释放内存。std::queue通常在提供shrink_to_fit的std::dequeue类型上实现。.如果您不使用C++11,请使用swapidiom. 关于c++-std::queue内存消耗导致内存泄漏-C++?,我们在St

c++ - 类成员和成员函数内存位置

这是一个简单的C++类,名为A:classA{public:explicitA():m_a(0){}explicitA(inta)m_a(a){}intgetA()const{returnm_a;}voidsetA(inta){m_a=a;}private:intm_a;}这是我目前所知道的:当您声明类实例的对象时,会为该对象分配内存。分配的内存相当于其成员的内存加起来。所以在我的例子中,它是:sizeof(A)=sizeof(int)=sizeof(m_a)A类的所有成员函数都存储在内存中的某个位置,A类的所有实例都使用相同的成员函数。这是我不知道的:成员函数存储在哪里,它们实际上是

c++ - 堆与堆栈内存使用 C++ 用于动态创建的类

如果您在C++中使用非指针成员变量和非指针成员函数创建一个类,但您动态地(使用指针)初始化该类的实例,那么内存使用是来自堆还是堆栈?对于我正在处理的项目的有用信息,因为我正在尝试从堆栈中减少内存:)。非常感谢任何回复。非常感谢,编码愉快。 最佳答案 如果您使用运算符new来分配您的类,那么它会被放在堆上。成员变量是否通过指针访问无关紧要。classA{inta;float*p;};A*pa=newA();//requiredmemoryisputontheheapAa;//requiredmemoryisputonthestack但

c++ - 如何在 C++ 中修改知道内存地址的对象?

晚上好。我打开VisualStudio2012并运行程序执行此操作:doublex=8768130;cout它在控制台中写入的地址是003CFBF8。然后,我打开了另一个VisualStudio拷贝并尝试阅读它,但我不确定我是否正确地阅读了它。在发布之前我已经在StackOverflow中进行了搜索,发现我应该这样做:double*ptr=reinterpret_cast(0x003CFBF8);cout但是它产生了异常Project2.exe中0x00A943DD处的未处理异常:0xC0000005:访问冲突读取位置0x003CFBF8。这是什么意思?我没有权限?我做错了吗?如果你问

c++ - 在 C++ 中有没有办法从不同的内存位置打印 char*?

我不确定这个问题是否有意义,所以我将尝试展示一个例子:想象一下,我在内存位置&s处有一个字符串(未以空值终止),在内存位置z处有另一个字符串(以空值终止)。chars[4];s[0]='a';s[1]='a';s[2]='a';s[3]='a';char*z=malloc(sizeof(char)*4);z[0]='a';z[1]='a';z[2]='a';z[3]='\0';char*y=malloc(sizeof(char)*4);y[0]='a';y[1]='a';y[2]='a';y[3]='\0';有没有办法表示字符串u,即s和z与另一个字符串的串联v,这是s和y的串联,而无

c++ - 动态内存分配会降低性能吗?

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭8年前。Improvethisquestion我浏览了videobyBjarneStroustrup他解释了为什么要避免链接列表。基本上,当使用指针动态分配内存时,缓存未命中的次数会增加,从而降低性能。但是,如果将同样的事情应用于树和图等非线性数据结构,同样的事情是否成立?因为,在树中,每个节点也有两个指针,指针的随机移动同样会导致缓存未命中。但是,树已被证明比线性数据结构表现更好。当然,树也可以使用数组来实现,但同样会消耗大量内存。我的问题是:动态

c++ - 内存分配和字符数组

我还是不太明白,到底会发生什么情况:inti=0;for(i;isome_array会充当:some_array=malloc(24);在循环的开始和free(some_array)在循环结束时?或者那些变量会在栈中分配,函数结束后销毁? 最佳答案 some_array对于block是局部的,因此它在循环的每次迭代开始时创建,并在循环的每次迭代结束时再次销毁。对于一个简单的数组,“创建”和“销毁”意义不大。如果(在C++中)您将它替换为(例如)一个在创建和销毁时打印出某些内容的对象,您会看到这些副作用发生了。

c++ - 描述这个元程序的内存消耗

我在一本关于元编程的书中找到了这个工作代码-templatestructbinary{staticunsignedconstvalue=binary::value*2+N%10;};templatestructbinary{staticunsignedconstvalue=0;};intmain(){unsignedx=binary::value;cout我的问题是-value的内存分配在哪里?是否分配在数据段上?此外,该书还说这段代码会产生一系列模板实例化,这些实例化以类似于递归的方式计算结果。这是否意味着对于每个模板实例化,都会在数据段上分配一个新的unsigned?

c++ - C++ 中是否有一种机制可以在没有动态内存分配的情况下从基类指针复制派生类的完整拷贝?

考虑以下示例,其中对象切片发生在基指针的取消引用期间。#includeclassBase{public:virtualvoidhello(){printf("helloworldfrombase\n");}};classDerived:publicBase{public:virtualvoidhello(){printf("helloworldfromderived\n");}};intmain(){Base*ptrToDerived=newDerived;autod=*ptrToDerived;d.hello();}我希望变量d保存类型为Derived的对象,而不是类型为Base的对